package com.bkhech.satoken.controller;

import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import com.bkhech.satoken.service.Cons;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author guowm
 * @date 2023/8/3
 */
@RequiredArgsConstructor
@RestController
@RequestMapping("user")
public class UserLoginController {

    /**
     * 测试登录，浏览器访问： http://localhost:8080/sample/user/doLogin?username=zhang&password=123456
     * @param username
     * @param password
     * @return
     */
    @RequestMapping("doLogin")
    public SaResult doLogin(String username, String password) {
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if ("zhang".equals(username) && "123456".equals(password)) {
            // 会话登录，参数填登录人的账号id
            StpUtil.login(Cons.uid);
            StpUtil.getSession().set(Cons.usernameKey, username);
            return SaResult.ok("登录成功");
        }
        return SaResult.error("登录失败");
    }


    /**
     * 查询登录状态，浏览器访问： http://localhost:8081/sample/user/isLogin
     * @return
     */
    @RequestMapping("isLogin")
    public SaResult isLogin() {
        // 校验当前客户端是否已经登录，如果未登录则抛出 `NotLoginException` 异常
//        StpUtil.checkLogin();
        return SaResult.ok("当前会话是否登录：" + StpUtil.isLogin());
    }

    /**
     * 查询 Token 信息
     * @return
     */
    @RequestMapping("tokenInfo")
    public SaResult tokenInfo() {
        return SaResult.data(StpUtil.getTokenInfo());
    }

    /**
     * 踢人下线
     */
    @RequestMapping("kickout")
    public void kickout() {
        StpUtil.kickout(Cons.uid);
    }

    /**
     * 封禁账号
     */
    @RequestMapping("disable")
    // -1 代表永久封禁
    public void disable() {
        StpUtil.disable(Cons.uid, 86400);
    }

    /**
     * 测试注销
     * @return
     */
    @RequestMapping("logout")
    public SaResult logout() {
        StpUtil.logout();
        return SaResult.ok();
    }

}
